function infoWindow(map) {

  // Now initialize all properties.
  this.map_ = map;

  // Create the DIV and set some basic attributes.
  var div = document.createElement('DIV');
  div.id = "div_info";
  div.style.border = "none";
  div.style.borderWidth = "0px";
  div.style.position = "absolute";

  // Set the overlay's div_ property to this DIV
  this.div_ = div;
  
  var cancelHandler = function (e) {
    e.cancelBubble = true;
    if (e.stopPropagation) {
      e.stopPropagation();
    }
  };
  
  var events = ["mousedown", "mouseover", "mouseout", "mouseup",
  "click", "dblclick", "touchstart", "touchend", "touchmove"];
	
  for (var i = 0; i < events.length; i++) {
	  google.maps.event.addDomListener(this.div_, events[i], cancelHandler);
  }
  
  google.maps.event.addDomListener(this.div_, "mouseover", function (e) {
      this.style.cursor = "default";
  });

  // Explicitly call setMap() on this overlay
  this.setMap(map);
}

infoWindow.prototype = new google.maps.OverlayView();

infoWindow.prototype.onAdd = function() {
  var panes = this.getPanes();
  panes.overlayMouseTarget.appendChild(this.div_);
};

infoWindow.prototype.draw = function() {	
	var overlayProjection = this.getProjection();
	if (overlayProjection == null) {return;}
	
  	var sw = overlayProjection.fromLatLngToDivPixel(this.map_.getBounds().getSouthWest());
  	var ne = overlayProjection.fromLatLngToDivPixel(this.map_.getBounds().getNorthEast());

  	// Resize the image's DIV to fit the indicated dimensions.
  	var div = this.div_;
  	div.style.left = sw.x + 'px';
  	div.style.top = ne.y + 'px';
  	div.style.width = '400px';
  	div.style.height = '850px';
};

infoWindow.prototype.onRemove = function() {
	this.div_.parentNode.removeChild(this.div_);
	this.div_ = null;
};